package lp2.projeto.database;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe responsavel pelo salvamento e pela recuperacao de informacoes
 */
public class Database {
	private Database() {
	}
	
	/**
	 * Salva um objeto em um arquivo
	 * @param endereco Endereco do arquivo
	 * @param objeto Objeto para salvar
	 * @throws IOException Se ocorreu algum erro no salvamento
	 */
	public static void salvarObjeto(String endereco, Serializable objeto) throws IOException {
		ObjectOutputStream saida = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(endereco)));
		saida.writeObject(objeto);
		saida.close();
	}
	
	/**
	 * Ler um objeto de um arquivo
	 * @param endereco Endereco do arquivo
	 * @return O objeto, caso seja possivel ler, ou null, caso o arquivo nao exista
	 * @throws IOException Se ocorreu um erro ao ler o arquivo, ou o arquivo eh invalido
	 */
	public static Object lerObjeto(String endereco) throws IOException {
		Object retorno = null;
		try {
			ObjectInputStream entrada = new ObjectInputStream(new BufferedInputStream(new FileInputStream(endereco)));
			retorno = entrada.readObject();
			entrada.close();
		} catch (FileNotFoundException e) {
		} catch (ClassNotFoundException e) {
			throw new IOException("Arquivo invalido");
		}
		return retorno;
	}
	
	/**
	 * Le um arquivo para um array bytes
	 * @param arquivo Arquivo
	 * @return array de bytes
	 * @throws IOException Caso ocorra algum erro na leitura
	 */
	public static byte[] lerArquivo(String arquivo) throws IOException {
		InputStream is = new FileInputStream(new File(arquivo));
		List<Integer> arquivoLista = new ArrayList<Integer>();
		int numero;
		
		while ((numero = is.read()) != -1)
			arquivoLista.add(numero);
		
		byte[] retorno = new byte[arquivoLista.size()];
		for (int i = 0; i < retorno.length; i++)
			retorno[i] = arquivoLista.get(i).byteValue();
		
		return retorno;	
	}
	
	/**
	 * Retorna a extensao de um arquivo
	 * @param nome Nome do arquivo
	 * @return A extensao, ou "" se nenhuma
	 */
	public static String getExtensao(String nome) {
		int ultimoIndex = nome.lastIndexOf('.');
		if (ultimoIndex < 0)
			return "";
		return nome.substring(ultimoIndex+1);
	}
}
